import math

def SumaListaTest1(lista, inicio):
  suma = 0.0
  m = len(lista)
  for it in range(inicio,m):
    suma += lista[it] 

  return suma/ (m-1)


def FuncionesTest1(listaValores):
  f1 = listaValores[0]
  g = 1 + 9*(SumaListaTest1(listaValores,1))
  h = 1 - (f1/g)**0.5
  f2 = g * h

  return (f1, f2)


def FuncionesTest2(listaValores):
  f1 = listaValores[0]
  g = 1 + 9*(SumaListaTest1(listaValores,1))
  h = 1 - (f1/g)**2
  f2 = g * h
  return (f1, f2)


def FuncionesTest3(listaValores):
  f1 = listaValores[0]
  g = 1 + 9*(SumaListaTest1(listaValores,1))
  h = 1 - ((f1/g)**0.5) - (f1/g)*math.sin(10*math.pi*f1)
  f2 = g * h
  return (f1, f2)



def SumaListaTest4(listaValores):
  return sum([val**2 - 10.0*math.cos(4.0*math.pi*val) for val in listaValores])


def FuncionesTest4(listaValores):
  f1 = listaValores[0]
  g = 1.0 + 10.0*(len(listaValores) - 1) + (SumaListaTest4((listaValores[1:])))
  h = 1.0 - (f1/g)**0.5
  f2 = g * h
  return (f1, f2)


def BitCount(listaBits):
  return sum(listaBits)


def VFunc(elem):
  if BitCount(elem) is 5:
    return 1
  elif BitCount(elem) < 5:
    return 2 + BitCount(elem)

  return 0


def FuncionesTest5(listaElems):
  f1 = 1 + BitCount(listaElems[0])
  g = sum([VFunc(elem) for elem in (listaElems[1:])])
  h = 1.0/f1
  f2 = g * h
  return (f1, f2)



def SumaListaTest6(lista):
  suma = sum(lista)
  return (suma/(len(lista)))**0.25


def FuncionesTest6(listaValores):
  f1 = 1 - math.exp(-4*listaValores[0]) * math.sin(6*math.pi*listaValores[0])**6
  g = 1 + 9*SumaListaTest6((listaValores[1:]))
  h = 1 - (f1/g)**0.5
  f2 = g * h
  return (f1, f2)




